package com.whfc.uni.dao;

import com.whfc.uni.dto.CarBoardAnalysisDTO;
import com.whfc.uni.dto.CarHourStatisticalDTO;
import com.whfc.uni.dto.CarInoutRecordDTO;
import com.whfc.uni.dto.CarLicensePlateStatisticalDTO;
import com.whfc.uni.entity.CarInoutRecord;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

public interface CarInoutRecordMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(CarInoutRecord record);

    int insertSelective(CarInoutRecord record);

    CarInoutRecord selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(CarInoutRecord record);

    int updateByPrimaryKey(CarInoutRecord record);

    /**
     * 批量插入记录
     *
     * @param recordList 记录列表
     */
    void batchInsert(@Param("recordList") List<CarInoutRecord> recordList);

    /**
     * 查找识别记录列表
     *
     * @param deptId       项目ID
     * @param date         日期
     * @param licensePlate 车牌号
     * @param deviceName   设备名称
     * @return 记录列表
     */
    List<CarInoutRecordDTO> selectRecordList(@Param("deptId") Integer deptId,
                                             @Param("date") Date date,
                                             @Param("licensePlate") String licensePlate,
                                             @Param("deviceName") String deviceName);
    /**
     * 获取随机一张图片
     *
     * @return 图片地址
     */
    String getRandomImgUrl();

    /**
     * 车牌统计
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    List<CarLicensePlateStatisticalDTO> selectCarLicensePlateStatistical(@Param("deptId")Integer deptId, @Param("startTime")Date startTime, @Param("endTime")Date endTime);

    /**
     * 小时统计进出次数
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    List<CarHourStatisticalDTO> selectHourStatistical(@Param("deptId")Integer deptId, @Param("startTime")Date startTime, @Param("endTime")Date endTime);

    /**
     * 小时统计车辆数量
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    List<CarHourStatisticalDTO> selectCarHourStatistical(@Param("deptId")Integer deptId, @Param("startTime")Date startTime, @Param("endTime")Date endTime);

    /**
     * 月统计车辆数量
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    List<CarHourStatisticalDTO> selectMothCarHourStatistical(@Param("deptId") Integer deptId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 车辆日志
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    List<CarLicensePlateStatisticalDTO> selectCarLog(@Param("deptId") Integer deptId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 车辆大屏进出记录统计
     *
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    CarBoardAnalysisDTO selectBoardAnalysis(@Param("deptId") Integer deptId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 查询车辆最后一次进出记录
     *
     * @param deptId
     * @param direction
     * @param startTime
     * @param endTime
     * @return
     */
    List<CarInoutRecordDTO> selectRecordListByDeptIdAndDirection(@Param("deptId") Integer deptId, @Param("direction") Integer direction, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 查找识别记录列表
     * @param deptId
     * @param startTime
     * @param endTime
     * @return
     */
    List<CarInoutRecordDTO> selectRecordListByDeptId(@Param("deptId")Integer deptId, @Param("startTime")Date startTime, @Param("endTime")Date endTime);
}
